Multi-tenant Architecture হল একটি সফটওয়্যার আর্কিটেকচার যেখানে একটি একক অ্যাপ্লিকেশন বা ডাটাবেস পরিবেশ (Environment) একাধিক গ্রাহক (Tenant) বা ক্লায়েন্টের সেবা প্রদান করে। প্রতিটি টেন্যান্ট একটি পৃথক এবং আলাদা পরিবেশ অনুভব করলেও, সমস্ত টেন্যান্ট একই অ্যাপ্লিকেশন বা ডাটাবেস ইনস্ট্যান্সের মাধ্যমে সেবা নেয়। এটি বিশেষ করে SaaS (Software as a Service) মডেল ব্যবহৃত অ্যাপ্লিকেশনগুলোর মধ্যে ব্যবহৃত হয়।
একটি multi-tenant অ্যাপ্লিকেশন বা ডাটাবেসে, একাধিক টেন্যান্ট বা গ্রাহক একই ইনফ্রাস্ট্রাকচারে চলতে থাকে, তবে তাদের ডেটা, কনফিগারেশন এবং সংস্থান পৃথক এবং নিরাপদ থাকে। এতে প্রতিটি টেন্যান্ট অন্য টেন্যান্ট থেকে বিচ্ছিন্ন থাকে, যদিও তারা একই অ্যাপ্লিকেশন শেয়ার করে।
tenant_id
ব্যবহার করে পার্থক্য করা হয়।Multi-tenant অ্যাপ্লিকেশনে একাধিক ক্লায়েন্ট একই অ্যাপ্লিকেশন, ডাটাবেস, এবং সার্ভার ব্যবহার করে, যা ইন্ডাস্ট্রি স্ট্যান্ডার্ড ডেটা ম্যানেজমেন্ট এবং সার্ভার রিসোর্স ব্যবহারের ক্ষেত্রে খরচ কমাতে সাহায্য করে।
একই অ্যাপ্লিকেশন ব্যবহার করার ফলে নতুন টেন্যান্ট যোগ করা সহজ হয়। যখন আপনার অ্যাপ্লিকেশন একাধিক ক্লায়েন্ট হ্যান্ডেল করতে সক্ষম হয়, তখন এটি আরও স্কেলেবল হয়ে ওঠে। একক ইনস্ট্যান্স থেকে একাধিক গ্রাহকের সেবা প্রদান করা যায়, যা পারফরম্যান্সে কোনও প্রভাব ফেলে না।
Multi-tenant আর্কিটেকচারের মাধ্যমে সফটওয়্যার মেইনটেন্যান্স এবং আপডেট একাধিক ক্লায়েন্টের জন্য একসাথে করা সম্ভব। এতে ক্লায়েন্টদের একে একে আপডেট দেওয়ার ঝামেলা নেই, বরং একক ইনস্ট্যান্স থেকেই সমস্ত টেন্যান্টকে আপডেট করা যায়।
একই অ্যাপ্লিকেশন এবং ডাটাবেসে একাধিক টেন্যান্ট থাকলে নতুন টেন্যান্ট যোগ করা সহজ হয়ে যায়। নতুন ক্লায়েন্টের জন্য নতুন ডাটাবেস বা সার্ভার স্থাপন করতে হয় না, ফলে দ্রুত এবং কার্যকরী ডেপ্লয়মেন্ট সম্ভব হয়।
প্রতিটি টেন্যান্টের ডেটা অন্য টেন্যান্ট থেকে সুরক্ষিত রাখা হয়। যদিও সমস্ত টেন্যান্ট একই ইনফ্রাস্ট্রাকচার ব্যবহার করে, তবে proper isolation এবং access control ব্যবস্থার মাধ্যমে ডেটার সুরক্ষা নিশ্চিত করা যায়।
Spring ORM-এ Multi-tenant অ্যাপ্লিকেশন তৈরি করার জন্য সাধারণত দুটি পদ্ধতি ব্যবহার করা হয়:
এই পদ্ধতিতে, tenant_id
এর ভিত্তিতে Spring ORM ডাটাবেস রাউটিং করে, যাতে সঠিক টেন্যান্টের ডেটাবেসে কুয়েরি পাঠানো হয়। এটি সাধারণত AbstractRoutingDataSource
ক্লাস ব্যবহার করে বাস্তবায়ন করা হয়।
public class MultiTenantDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return TenantContext.getCurrentTenant(); // tenant_id return করা হবে
}
}
Hibernate একটি MultiTenancyStrategy
প্রদান করে, যার মাধ্যমে টেন্যান্টের জন্য আলাদা স্কিমা বা ডাটাবেস ব্যবহার করা যায়। এই কনফিগারেশন সাধারণত hibernate.multiTenancy
প্রপার্টি দিয়ে করা হয়।
<property name="hibernate.multiTenancy" value="SCHEMA"/>
<property name="hibernate.tenant_identifier_resolver" value="com.example.TenantIdentifierResolver"/>
<property name="hibernate.multi_tenant_connection_provider" value="com.example.MultiTenantConnectionProvider"/>
Multi-tenant Architecture একটি শক্তিশালী আর্কিটেকচার প্যাটার্ন যা একাধিক ক্লায়েন্টের জন্য একটি একক অ্যাপ্লিকেশন বা ডাটাবেস ব্যবস্থাপনা করে। এটি খরচ কমানো, স্কেলেবিলিটি উন্নত করা, এবং কেন্দ্রীকৃত মেইনটেন্যান্স সহজ করে। তবে, এটি কিছু চ্যালেঞ্জের মুখোমুখি হয়, যেমন ডেটা বিচ্ছিন্নতা এবং পারফরম্যান্স অপটিমাইজেশন। Spring ORM-এ Multi-tenant অ্যাপ্লিকেশন ব্যবহারে Database Routing
এবং Hibernate Multi-tenant Configuration
ব্যবহৃত হতে পারে, যা ডাটাবেস রাউটিং এবং টেন্যান্ট আইডেন্টিফিকেশন সঠিকভাবে পরিচালনা করতে সাহায্য করে।
Read more